// chrono Demo
// Created by Administrator on 2025/6/27.
//

#include <chrono>
#include <iomanip>
#include <iostream>
#include <bits/this_thread_sleep.h>
using namespace std;


/**
 * chrono 用于处理时间和日期的库
 *
 * 1、时间点：表示一个特定的时间点
 * 2、持续时间：两个时间点的间隔
 * 3、时钟：时间点和持续时间的来源
 *      a、chrono::system_clock：获取当前系统时间
 *      b、chrono::steady_clock：获取当前程序运行时间
 *      c、chrono::high_resolution_clock：高精度时钟
 */
void exeFunc() {
    cout << "执行开始" << endl;
    _sleep(1000);
    // this_thread::sleep_for(chrono::seconds(1));
    cout << "执行结束" << endl;
}

void callFunc() {
    // 记录函数开始时间点
    const auto start = chrono::high_resolution_clock::now();
    // 执行函数
    exeFunc();
    // 记录函数执行结束时间点
    const auto end = chrono::high_resolution_clock::now();

    // 计算执行时间
    const auto duration = chrono::duration_cast<chrono::microseconds>(end - start);
    cout << "function execute  :\t" << duration.count() << " milliseconds" << endl;


    // 获取当前时间点
    const auto now = chrono::system_clock::now();
    const time_t tt = chrono::system_clock::to_time_t(now);
    cout << "current seconds timestamp :\t" << tt << endl;
    char buf[80];
    strftime(buf, 80, "%Y-%m-%d %H:%M:%S", localtime(&tt));
    cout << "current time:\t" << buf << endl;

    // 获取当前时间 2
    const auto now2 = put_time(localtime(&tt), "%Y-%m-%d %H:%M:%S");
    cout << "current time:\t" << now2 << endl;
}

int main(int argc, char *argv[]) {
    callFunc();
}
